<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        constructor
        ① 所有类的内部都有一个constructor方法
        ② 自动执行，负责返回的 new constructor() 的结果
        ③ 实例化子类对象的时候，父类和子类中的 constructor 都会被调用
        ④ 如果显式实现子父类中的 constructor 必须要手动通过 super() 调用父类中的 constructor
        ⑤ 子类中的 this 对象属性定义，必须要放在  super() 调用之后
      */
      class Animal {
        constructor() {
          console.log("Animal");
        }
      }
      class Cat extends Animal {
        constructor() {
          super(); //super.constructor();
          console.log("Cat");
          this.name = "tom";
        }
      }
      const c = new Cat();
      // c->Cat.prototype->Animal.prototype
    </script>
  </body>
</html>
